package Day12.实战;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Author kalista
 * @Description
 * @Date 2020/11/18  16:21
 **/
public class Test {
    public static void main(String[] args) {


        NoBug noBug = new NoBug();
        // 获取nobug class
        Class aClass = noBug.getClass();
        // 获得到nobug的所有方法
        Method[] declaredMethods = aClass.getDeclaredMethods();
        // 记录异常的次数
        int errorNumber = 0;
        for (Method m : declaredMethods) {
            // isAnnotationPresent如果此元素上存在指定类型的注释，则返回true，否则返回false。 该方法主要用于方便访问标记注释。
            if (m.isAnnotationPresent( Jiancha.class )){
                System.out.println(m.getName());
                try {
                    // 破解
                    m.setAccessible(true);
                    //在具有指定参数的 方法对象上调用此 方法对象表示的底层方法。
                    m.invoke(noBug,null);
                } catch (Exception e) {
                    errorNumber++;
                    System.out.println("异常信息:" + e.getCause().getClass().getName());
                }
            }
        }

        System.out.println("你的异常出现次数为:" + errorNumber);


    }
}
